package com.lixia.lxframework.framework.system.constant;

import com.lixia.lxframework.framework.utils.time.DateFormatUtils;
import org.springframework.stereotype.Component;

import java.io.File;

/**
 * @ClassName Constants
 * @Description 常量类
 * @Author Mr.wang
 * @Date 2019/3/3 22:58
 * @Version 1.0
 **/
@Component
public interface Constants {

    String HH_MM = "HH:mm";
    String HH_MM_SS = "HH:mm:ss";
    String YY_MM_DD = "yyyy-MM-dd";
    String YY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
    String YY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    String MM = "MM";
    String yyyyMMdd = "yyyyMMdd";
    String MMdd = "MM-dd";
    String MM_DD_YYYY = "MM-dd-yyyy";
    String DD_MM_YYYY = "dd-MM-yyyy";

    /**
     * session中的用户信息
     */
    String SESSION_USER_DEFAULT = "SysUser";
    /**
     * session中的用户组信息
     */
    String SESSION_GROUP_DEFAULT = "SysGroup";
    /**
     * session中的机构信息
     */
    String SESSION_ORG_DEFAULT = "SysOrg";
    /**
     * session中的部门信息
     */
    String SESSION_DEPT_DEFAULT = "SysDept";
    /**
     * 当前登录模块
     */
    String SESSION_CURRENT_MODULE = "currentModule";

    String PK_USER_PREFIX = "U";

    /**
     * 上传文件路径
     */
    String UPLOAD_FILE_DIRECTORY = File.separator
            .concat(DateFormatUtils.getCurrentDay(YY_MM_DD)).concat(File.separator);

    /*********cache Config-开始***********/
    String CACHE_EHCACHE_PREFIX = "ehcache_cache";

    String CACHE_REDIS_PREFIX = "shiro:cache:";
    /*********cache Config-开始***********/

    /*********session Config-开始*********/
    String SESSION_REDIS_PREFIX = "shiro:session:";


    String CAPTCHA_CODE_PREFIX = "captcha";

    /*********session Config-结束*********/

    /**
     * 触发器状态
     */
    enum TRIGGER_STATUS {
        /**
         * 正常执行
         */
        ACQUIRED("ACQUIRED"),
        /**
         * 等待执行
         */
        WAITING("WAITING"),
        /**
         * 暂停
         */
        PAUSED("PAUSED"),
        /**
         * 阻塞
         */
        BLOCKED("BLOCKED"),
        /**
         * 错误
         */
        ERROR("ERROR");
        String status;

        TRIGGER_STATUS(String status) {
            this.status = status;
        }

        public String getStatus() {
            return status;
        }
    }

    /**
     * Cron触发器
     */
    String QRTZ_TRIGGER_TYPE_CRON = "CRON";

    /**
     * 定时器默认组名
     */
    String QRTZ_JOB_GROUP_NAME = "LX_JOB_GROUP_NAME";
    /**
     * 触发器默认组名
     */
    String QRTZ_TRIGGER_GROUP_NAME = "LX_TRIGGER_GROUP_NAME";


    /**********************************文件后缀-开始**********************************/
    /**
     * 缩略图后缀
     */
    String ATTACHMENT_SHORT_PICTURE_SUFFIX = "_thumbnail";
    String ATTACHMENT_SUFFIX_JPG = "JPG";
    String ATTACHMENT_SUFFIX_JPEG = "JPEG";
    String ATTACHMENT_SUFFIX_PNG = "PNG";
    String ATTACHMENT_SUFFIX_GIF = "GIF";
    String ATTACHMENT_SUFFIX_BMP = "BMP";
    /**********************************文件后缀-结束**********************************/

    /**********************************常见类型-开始**********************************/
    String TRUE_STRING = "true";
    String FALSE_STRING = "false";
    /**********************************常见类型-结束**********************************/

    /**
     * 数据类型
     */
    enum DATA_TYPE {
        /**
         * 普通类型
         */
        NORMAL(new Byte("1"), "normal"),
        /**
         * 系统内置
         */
        SYSTEM(new Byte("2"), "system");
        String type;
        Byte num;

        DATA_TYPE(Byte num, String type) {
            this.num = num;
            this.type = type;
        }

        public String getType() {
            return type;
        }

        public Byte getNum() {
            return num;
        }
    }

    /**
     * 方法类型
     */
    enum METHOD_TYPE {
        /**
         * 方法类型-普通方法
         */
        NORMAL("normal"),
        /**
         * 方法类型-rest接口
         */
        REST("rest"),
        /**
         * 方法类型-soap接口
         */
        SOAP("soap"),
        /**
         * 方法类型-定时器
         */
        TIMER("timer");

        String type;

        METHOD_TYPE(String type) {
            this.type = type;
        }

        public String getType() {
            return type;
        }
    }

    /**
     * 资源级别
     */
    enum RESOURCES_LEVEL {
        /**
         * 根节点
         */
        ROOT("0", "root"),
        /**
         * 叶子节点
         */
        LEAF("1", "leaf");
        String code;
        String level;

        RESOURCES_LEVEL(String code, String level) {
            this.code = code;
            this.level = level;
        }

        public String getLevel() {
            return level;
        }

        public String getCode() {
            return code;
        }
    }

    enum BOOL {

        TRUE(new Byte("1"), true),
        FALSE(new Byte("0"), false);
        Byte code;
        boolean value;

        BOOL(Byte code, boolean value) {
            this.code = code;
            this.value = value;
        }

        public Byte getCode() {
            return code;
        }

        public boolean isValue() {
            return value;
        }
    }

    enum ICON_TYPE {
        BOOTSTRAP("bootstrap"),
        IMAGE("image");
        String type;

        ICON_TYPE(String type) {
            this.type = type;
        }

        public String getType() {
            return type;
        }
    }

    enum SHIRO_FILTER {
        PERMISSION("perms[\"{0}\"]"),
        ROLE("roles[\"{0}\"]");
        String type;

        SHIRO_FILTER(String type) {
            this.type = type;
        }

        public String getType() {
            return type;
        }
    }
}
